home *** CD-ROM | disk | FTP | other *** search
/ Greenhouse Effect Detection Expriment / NASA Greenhouse Effect Detection Expriment 1992 - Disc 2.iso / software / dos / cdf22pc / src / test / qst2c.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-09  |  12.8 KB  |  365 lines

  1. /******************************************************************************
  2. *
  3. *  NSSDC/CDF                Quick Start Test Program (C interface).
  4. *
  5. *  Version 1.6, 10-Feb-92, ST Systems (STX)
  6. *
  7. *  Modification history:
  8. *
  9. *   V1.0  24-Jan-91, J Love    Original version (for CDF V2.0).
  10. *   V1.1   7-Mar-91, J Love    Modified output display.
  11. *   V1.2  27-May-91, J Love    Changed for CDF V2.1 enhancements.
  12. *   V1.3  25-Jun-91, J Love    Renamed CDF for portability.
  13. *   V1.4   2-Aug-91, J Love    Added MIPSEB encoding.  Use 'Exit'/'ExitBAD'.
  14. *   V1.5  12-Sep-91, J Love    Modified for IBM-PC port.
  15. *   V1.6  10-Feb-92, J Love    CDF V2.2.
  16. *
  17. ******************************************************************************/
  18.  
  19. #include <stdio.h>
  20.  
  21. #include "cdfdist.h"
  22.  
  23. #define N_DIMS        2
  24. #define DIM_0_SIZE    2
  25. #define DIM_1_SIZE    3
  26.  
  27. #define stop(status,message) { \
  28. char text[CDF_STATUSTEXT_LEN+1]; \
  29. CDFerror (status, text); \
  30. printf ("%s\n", text); \
  31. printf ("OOPS (%s)\n", message); \
  32. ExitBAD; \
  33. }
  34.  
  35. main ()
  36. {
  37. CDFid        id;
  38. CDFstatus    status;
  39. long        dim_n;
  40. static long    encoding = NETWORK_ENCODING;
  41. static long    actual_encoding = NETWORK_ENCODING;
  42. static long    majority = ROW_MAJOR;
  43. static long    numDims = N_DIMS;
  44. static long    dimSizes[N_DIMS] = { DIM_0_SIZE, DIM_1_SIZE };
  45. static long    varDataType = { CDF_INT4 };
  46. long        varDataType_out;
  47. static long    varNumElements = { 1 };
  48. long        varNumElements_out;
  49. long        varNum_out;
  50. static long    varValues[DIM_0_SIZE][DIM_1_SIZE] = { 1, 2, 3, 4, 5, 6 };
  51. long        indices[N_DIMS];
  52. static long    recNum = { 0 };
  53. long        varValue_out;
  54. static long    recStart = { 0 };
  55. static long    recCount = { 1 };
  56. static long    recInterval = { 1 };
  57. static long    counts[N_DIMS] = { DIM_0_SIZE, DIM_1_SIZE };
  58. static long    intervals[N_DIMS] = { 1, 1 };
  59. long        varBuffer_out[DIM_0_SIZE][DIM_1_SIZE];
  60. long        attrNum_out;
  61. static long    entryNum = { 2 };
  62. long        maxEntry_out;
  63. static long    attrScope = { GLOBAL_SCOPE_ASSUMED };
  64. long        attrScope_out;
  65. static long    new_attrScope = { GLOBAL_SCOPE };
  66. static long    attrDataType = { CDF_INT4 };
  67. long        attrDataType_out;
  68. static long    attrNumElements = { 1 };
  69. long        attrNumElements_out;
  70. static long    attrValue = { 1 };
  71. long        attrValue_out;
  72. long        encoding_out;
  73. long        majority_out;
  74. long        numDims_out;
  75. long        dimSizes_out[N_DIMS];
  76. long        maxRec_out;
  77. long        numVars_out;
  78. long        numAttrs_out;
  79. long        version_out;
  80. long        release_out;
  81.  
  82. long        x0, x1, x;
  83.  
  84. static long    varRecVariance = { VARY };
  85. long        varRecVariance_out;
  86. static long    varDimVariances[N_DIMS] = { VARY, VARY };
  87. long        varDimVariances_out[N_DIMS];
  88.  
  89. static char    varName[] = "VAR1";
  90. static char    new_varName[] = "VAR2";
  91. char        varName_out[CDF_VAR_NAME_LEN+1];
  92. static char    attrName[] = "ATTR1";
  93. static char    new_attrName[] = "ATTR2";
  94. char        attrName_out[CDF_ATTR_NAME_LEN];
  95. char        CopyRightText[CDF_COPYRIGHT_LEN+1];
  96. char        errorText[CDF_ERRTEXT_LEN+1];
  97.  
  98. /*****************************************************************************/
  99.  
  100. printf ("\n\nTesting Standard/C interface...\n\n");
  101.  
  102. /******************************************************************************
  103. *  Create CDF.
  104. ******************************************************************************/
  105.  
  106. status = CDFcreate ("QST2C", numDims, dimSizes, encoding, majority, &id);
  107. if (status < CDF_OK) {
  108.   if (status == CDF_EXISTS) {
  109.      status = CDFopen ("QST2C", &id);
  110.      if (status != CDF_OK) stop (status, "1.0");
  111.  
  112.      status = CDFdelete (id);
  113.      if (status != CDF_OK) stop (status, "1.1");
  114.  
  115.      status = CDFcreate ("QST2C", numDims, dimSizes, encoding, majority,
  116.                  &id);
  117.      if (status != CDF_OK) stop (status, "1.2");
  118.   }
  119.   else
  120.      stop (status, "1.3");
  121. }
  122.  
  123. /******************************************************************************
  124. *  Create variable.
  125. ******************************************************************************/
  126.  
  127. status = CDFvarCreate (id, varName, varDataType, varNumElements, varRecVariance,
  128.                varDimVariances, &varNum_out);
  129. if (status != CDF_OK) stop (status, "2.0");
  130.  
  131. /******************************************************************************
  132. *  Close CDF.
  133. ******************************************************************************/
  134.  
  135. status = CDFclose (id);
  136. if (status != CDF_OK) stop (status, "3.0");
  137.  
  138. /******************************************************************************
  139. *  Reopen CDF.
  140. ******************************************************************************/
  141.  
  142. status = CDFopen ("QST2C", &id);
  143. if (status != CDF_OK) stop (status, "4.0");
  144.  
  145. /******************************************************************************
  146. *  Delete CDF.
  147. ******************************************************************************/
  148.  
  149. status = CDFdelete (id);
  150. if (status != CDF_OK) stop (status, "5.0");
  151.  
  152. /******************************************************************************
  153. *  Create CDF again (previous delete will allow this).
  154. ******************************************************************************/
  155.  
  156. status = CDFcreate ("QST2C", numDims, dimSizes, encoding, majority, &id);
  157. if (status != CDF_OK) stop (status, "6.0");
  158.  
  159. /******************************************************************************
  160. *  Create variable.
  161. ******************************************************************************/
  162.  
  163. status = CDFvarCreate (id, varName, varDataType, varNumElements, varRecVariance,
  164.                varDimVariances, &varNum_out);
  165. if (status != CDF_OK) stop (status, "7.0");
  166.  
  167. /******************************************************************************
  168. *  PUT to variable.
  169. ******************************************************************************/
  170.  
  171. for (x0 = 0; x0 < DIM_0_SIZE; x0++)
  172.    for (x1 = 0; x1 < DIM_1_SIZE; x1++)
  173.       {
  174.       indices[0] = x0;
  175.       indices[1] = x1;
  176.       status = CDFvarPut (id, CDFvarNum(id,varName), recNum, indices,
  177.               &varValues[x0][x1]);
  178.       if (status != CDF_OK) stop (status, "8.0");
  179.       }
  180.  
  181. /******************************************************************************
  182. *  GET from the variable.
  183. ******************************************************************************/
  184.  
  185. for (x0 = 0; x0 < DIM_0_SIZE; x0++)
  186.    for (x1 = 0; x1 < DIM_1_SIZE; x1++)
  187.       {
  188.       indices[0] = x0;
  189.       indices[1] = x1;
  190.       status = CDFvarGet (id, CDFvarNum(id,varName), recNum, indices,
  191.               &varValue_out);
  192.       if (status != CDF_OK) stop (status, "9.0");
  193.  
  194.       if (varValue_out != varValues[x0][x1]) stop (status, "9.1");
  195.       }
  196.  
  197. /******************************************************************************
  198. *  HyperPUT to the variable.
  199. ******************************************************************************/
  200.  
  201. for (x0 = 0; x0 < DIM_0_SIZE; x0++)
  202.    for (x1 = 0; x1 < DIM_1_SIZE; x1++)
  203.       varValues[x0][x1] = -varValues[x0][x1];
  204.  
  205. indices[0] = 0;
  206. indices[1] = 0;
  207.  
  208. status = CDFvarHyperPut (id, CDFvarNum(id,varName), recStart, recCount,
  209.                  recInterval, indices, counts, intervals, varValues);
  210. if (status != CDF_OK) stop (status, "10.0");
  211.  
  212. /******************************************************************************
  213. *  HyperGET from variable.
  214. ******************************************************************************/
  215.  
  216. status = CDFvarHyperGet (id, CDFvarNum(id,varName), recStart, recCount,
  217.                  recInterval, indices, counts, intervals,
  218.                varBuffer_out);
  219. if (status != CDF_OK) stop (status, "11.0");
  220.  
  221. for (x0 = 0; x0 < DIM_0_SIZE; x0++)
  222.    for (x1 = 0; x1 < DIM_1_SIZE; x1++)
  223.       if (varBuffer_out[x0][x1] != varValues[x0][x1]) stop (status, "11.1");
  224.  
  225. /******************************************************************************
  226. *  Create attribue.
  227. ******************************************************************************/
  228.  
  229. status = CDFattrCreate (id, attrName, attrScope, &attrNum_out);
  230. if (status != CDF_OK) stop (status, "12.0");
  231.  
  232. /******************************************************************************
  233. *  PUT to attribute.
  234. ******************************************************************************/
  235.  
  236. status = CDFattrPut (id, CDFattrNum(id,attrName), entryNum, attrDataType,
  237.              attrNumElements, &attrValue);
  238. if (status != CDF_OK) stop (status, "13.0");
  239.  
  240. /******************************************************************************
  241. *  GET from attribute.
  242. ******************************************************************************/
  243.  
  244. status = CDFattrGet (id, CDFattrNum(id,attrName), entryNum, &attrValue_out);
  245. if (status != CDF_OK) stop (status, "14.0");
  246.  
  247. /******************************************************************************
  248. *  Get CDF documentation.
  249. ******************************************************************************/
  250.  
  251. status = CDFdoc (id, &version_out, &release_out, CopyRightText);
  252. if (status != CDF_OK) stop (status, "15.0");
  253.  
  254. printf ("CDF V%ld.%ld\n", version_out, release_out);        /* V1.1 */
  255. printf ("%s\n", CopyRightText);
  256.  
  257. /******************************************************************************
  258. *  Inquire CDF.
  259. ******************************************************************************/
  260.  
  261. status = CDFinquire (id, &numDims_out, dimSizes_out, &encoding_out,
  262.              &majority_out, &maxRec_out, &numVars_out, &numAttrs_out);
  263. if (status != CDF_OK) stop (status, "16.0");
  264.  
  265. if (numDims_out != numDims) stop (status, "16.1");
  266. for (x = 0; x < N_DIMS; x++)
  267.    if (dimSizes_out[x] != dimSizes[x]) stop (status, "16.2");
  268. if (encoding_out != actual_encoding) stop (status, "16.3");
  269. if (majority_out != majority) stop (status, "16.4");
  270. if (maxRec_out != 0) stop (status, "16.5");
  271. if (numVars_out != 1) stop (status, "16.6");
  272. if (numAttrs_out != 1) stop (status, "16.7");
  273.  
  274. /******************************************************************************
  275. *  Rename variable.
  276. ******************************************************************************/
  277.  
  278. status = CDFvarRename (id, CDFvarNum(id,varName), new_varName);
  279. if (status != CDF_OK) stop (status, "17.0");
  280.  
  281. /******************************************************************************
  282. *  Inquire variable.
  283. ******************************************************************************/
  284.  
  285. status = CDFvarInquire (id, CDFvarNum(id,new_varName), varName_out,
  286.             &varDataType_out, &varNumElements_out,
  287.             &varRecVariance_out, varDimVariances_out);
  288. if (status != CDF_OK) stop (status, "18.0");
  289.  
  290. if (strcmp(varName_out,new_varName) != 0) stop (status, "18.1");
  291. if (varDataType_out != varDataType) stop (status, "18.2");
  292. if (varNumElements_out != varNumElements) stop (status, "18.3");
  293. if (varRecVariance_out != varRecVariance) stop (status, "18.4");
  294.  
  295. for (dim_n = 0; dim_n < numDims; dim_n++)
  296.    if (varDimVariances_out[dim_n] != varDimVariances[dim_n]) stop (status, "18.4");
  297.  
  298. /******************************************************************************
  299. *  Close variable.
  300. ******************************************************************************/
  301.  
  302. status = CDFvarClose (id, CDFvarNum(id,new_varName));
  303. if (status != CDF_OK) stop (status, "19.0");
  304.  
  305. /******************************************************************************
  306. *  Rename attribute.
  307. ******************************************************************************/
  308.  
  309. status = CDFattrRename (id, CDFattrNum(id,attrName), new_attrName);
  310. if (status != CDF_OK) stop (status, "20.0");
  311.  
  312. /******************************************************************************
  313. *  Correct attribute scope.
  314. ******************************************************************************/
  315.  
  316. status = CDFattrCorrectScope (id, CDFattrNum(id,new_attrName), new_attrScope);
  317. if (status != CDF_OK) stop (status, "21.0");
  318.  
  319. /******************************************************************************
  320. *  Inquire attribute.
  321. ******************************************************************************/
  322.  
  323. status = CDFattrInquire (id, CDFattrNum(id,new_attrName), attrName_out,
  324.              &attrScope_out, &maxEntry_out);
  325. if (status != CDF_OK) stop (status, "22.0");
  326.  
  327. if (strcmp(attrName_out,new_attrName) != 0) stop (status, "22.1");
  328. if (attrScope_out != attrScope_out) stop (status, "22.2");
  329. if (maxEntry_out != entryNum) stop (status, "22.3");
  330.  
  331. /******************************************************************************
  332. *  Inquire attribute entry.
  333. ******************************************************************************/
  334.  
  335. status = CDFattrEntryInquire (id, CDFattrNum(id,new_attrName), entryNum,
  336.                  &attrDataType_out, &attrNumElements_out);
  337. if (status != CDF_OK) stop (status, "23.0");
  338.  
  339. if (attrDataType_out != attrDataType) stop (status, "23.1");
  340. if (attrNumElements_out != attrNumElements) stop (status, "23.1");
  341.  
  342. /******************************************************************************
  343. *  Get error text.
  344. ******************************************************************************/
  345.  
  346. CDFerror (CDF_OK, errorText);
  347. printf ("%s\n", errorText);
  348.  
  349. /******************************************************************************
  350. *  Close CDF.
  351. ******************************************************************************/
  352.  
  353. status = CDFclose (id);
  354. if (status != CDF_OK) stop (status, "24.0");
  355.  
  356. /*****************************************************************************/
  357.  
  358. printf ("\nTEST SUCCESSFUL\n");
  359. Exit;
  360.  
  361. #if defined(__MSDOS__)
  362. return;
  363. #endif
  364. }
  365.